package main

import "fmt"

// 构造函数

// 定义结构体
type preson struct {
	name string
	age  int
}

// 实现构造函数
// 返回的是结构体还是结构体指针是根据定义结构体的内存大小决定的

// func newPreson(name string, age int) preson {
// 	return preson{
// 		name: name,
// 		age:  age,
// 	}

// }

// 使用内存不用copy，声明和初始化较多时，结构体是copy完成的，如果参数较多内存不断copy会消耗内存

// 构造函数约定俗成用new开头
func newPreson(name string, age int) *preson { // 使用结构体指针
	return &preson{
		name: name,
		age:  age,
	}

}

func main() {
	// 调用构造函数实现结构定义并完成声明和初始化
	p1 := newPreson("zhihuan", 12)
	p2 := newPreson("致幻", 22)
	fmt.Println(p1, p2.age)

}
